home *** CD-ROM | disk | FTP | other *** search
/ STraTOS 1997 April & May / STraTOS 1 - 1997 April & May.iso / CD01 / INTERNET / SITES / RAND / BM132A.LZH / bm_132a / timing.s < prev   
Encoding:
Text File  |  1995-11-16  |  6.6 KB  |  344 lines

  1.  
  2. timerc        =    $114
  3.  
  4. cdcr        =    $fffffa1d
  5. tcdr        =    $fffffa23
  6.  
  7. frames_per_sec
  8.  
  9. *-------------------------------------------------------*
  10. init_timing:
  11. *-------------------------------------------------------*
  12.     push.w        sr
  13.     move.w        #$2700,sr
  14.     ifd        debuggable
  15.     move.l        $4d2.w,old_vbi
  16.     move.l        #new_vbi,$4d2.w
  17.     elseif
  18.     move.l        $70.w,old_vbi
  19.     move.l        #new_vbi,$70.w
  20.     endc
  21.     ifd        enable_timing
  22.     move.l        timerc.w,old_timerc
  23.     move.l        #framecounter,timerc.w
  24.     and.b        #%00001111,cdcr.w
  25.     move.b        #192,tcdr.w        ; 2457600/192 = 12800Hz
  26.     or.b        #(5<<4),cdcr.w        ; 12800/64 = 200Hz
  27.     endc
  28.     pop.w        sr
  29.     ifd        enable_timing
  30.     bsr        init_font
  31.     endc
  32.     rts
  33.  
  34. *-------------------------------------------------------*
  35. reset_timing:
  36. *-------------------------------------------------------*
  37.     push.w        sr
  38.     move.w        #$2700,sr
  39.     ifd        enable_timing
  40.     move.l        old_timerc,timerc.w
  41.     endc
  42.     ifd        debuggable
  43.     move.l        old_vbi,$4d2.w
  44.     elseif
  45.     move.l        old_vbi,$70.w
  46.     endc
  47.     pop.w        sr
  48.     rts
  49.  
  50. *-------------------------------------------------------*
  51. timing:
  52. *-------------------------------------------------------*
  53.     ifd        enable_timing
  54.     move.w        #8,char_x
  55.     move.w        #8,char_y
  56.     move.w        #$FFFF,char_col
  57.     lea        stringspace,a0
  58.     clr.b        (a0)
  59.     move.l        a0,numtext_ptr
  60.     ifd        frames_per_sec
  61.     lea        fps,a0
  62.     bsr        pushtext
  63.     bsr        average_times
  64.     move.l        #200*8,d0
  65.     swap        d0
  66.     divu.l        d1,d0
  67.     push.l        d0
  68.     mulu.w        #10000,d0
  69.     swap        d0
  70.     ext.l        d0
  71.     moveq        #4,d7
  72.     bsr        pushdigits
  73.     lea        point,a0
  74.     bsr        pushtext
  75.     pop.l        d0
  76.     swap        d0
  77.     ext.l        d0
  78.     moveq        #1,d7
  79.     bsr        pushdigits
  80.     elseif
  81.     lea        frames,a0
  82.     bsr        pushtext
  83.     bsr        average_times
  84.     move.l        d1,d0
  85.     moveq        #1,d7
  86.     bsr        pushdigits
  87.     endc
  88.     move.l        numtext_ptr,a0
  89.     jsr        print_line
  90.     endc
  91.     rts
  92.  
  93. *-------------------------------------------------------*
  94. average_times:
  95. *-------------------------------------------------------*
  96.     ifd        frames_per_sec
  97.     lea        fc_history,a0
  98.     moveq        #8-2,d0
  99.     move.l        fpsc,d1
  100.     clr.l        fpsc
  101.     move.l        d1,d3
  102. .lp:    move.l        4(a0),d2
  103.     add.l        d2,d1
  104.     move.l        d2,(a0)+
  105.     dbra        d0,.lp
  106.     move.l        d3,(a0)
  107.     add.l        fpso,d1
  108.     lsr.l        d1
  109.     move.l        d1,fpso
  110.     elseif
  111.     move.l        ovbls,d1
  112.     add.l        vbls,d1
  113.     clr.l        vbls
  114.     lsr.l        d1
  115.     move.l        d1,ovbls
  116.     endc
  117.     rts
  118.     
  119. *-------------------------------------------------------*
  120. pushdigits:
  121. *-------------------------------------------------------*
  122. ;    d0     =     number
  123.     move.l        numtext_ptr,a0
  124.     move.l        a0,a1
  125.     moveq        #'0',d3
  126.     move.l        d3,d1
  127.     moveq        #10,d4
  128.     tst.l        d0
  129.     beq.s        .zero
  130. .loop    ext.l        d0
  131.     divu        d4,d0
  132.     move.l        d0,d1
  133.     swap        d1
  134.     add.w        d3,d1
  135. .zero:    move.b        d1,-(a0)
  136.     subq.l        #1,d7
  137.     bgt.s        .loop
  138.     tst.w        d0
  139.     bne.s        .loop
  140.     move.l        a0,numtext_ptr
  141.     rts
  142.  
  143. *-------------------------------------------------------*
  144. pushtext:
  145. *-------------------------------------------------------*
  146.     move.l        numtext_ptr,a1
  147.     moveq        #-1,d0
  148. .lp    addq.l        #1,d0
  149.     tst.b        (a0)+
  150.     bne.s        .lp
  151.     subq.l        #1,a0
  152.     bra.s        .go
  153. .cop:    move.b        -(a0),-(a1)
  154. .go:    dbra        d0,.cop
  155.     move.l        a1,numtext_ptr
  156.     rts
  157.  
  158. *-------------------------------------------------------*
  159. *    Print single character                *
  160. *-------------------------------------------------------*
  161. *    d0        character            *
  162. *    a1        screen                *            
  163. *-------------------------------------------------------*
  164. print_char:
  165. *-------------------------------------------------------*
  166.     move.w        char_y,d7
  167.     move.l        a1,a3
  168.     mulu        scrwidth,d7
  169.     add.l        d7,d7
  170.     add.l        d7,a3
  171.     move.w        char_x,d7
  172.     ext.l        d7
  173.     add.l        d7,d7
  174.     add.l        d7,a3
  175.     lea        (a6,d0.w),a2
  176.     move.w        char_col,d1
  177.     move.w        #256,d6
  178.     move.w        scrwidth,d7
  179.     ext.l        d6
  180.     ext.l        d7
  181.     add.l        d7,d7
  182.     moveq        #6-1,d4
  183.     moveq        #0,d3
  184. .ylp    move.l        a3,a5
  185.     move.b        (a2),d0
  186.     add.b        d0,d0
  187.     bcc.s        .n1
  188.     move.w        d1,(a5)
  189. .n1    addq.l        #2,a5
  190.     add.b        d0,d0
  191.     bcc.s        .n2
  192.     move.w        d1,(a5)
  193. .n2    addq.l        #2,a5
  194.     add.b        d0,d0
  195.     bcc.s        .n3
  196.     move.w        d1,(a5)
  197. .n3    addq.l        #2,a5
  198.     add.b        d0,d0
  199.     bcc.s        .n4
  200.     move.w        d1,(a5)
  201. .n4    addq.l        #2,a5
  202.     add.b        d0,d0
  203.     bcc.s        .n5
  204.     move.w        d1,(a5)
  205. .n5    addq.l        #2,a5
  206.     add.b        d0,d0
  207.     bcc.s        .n6
  208.     move.w        d1,(a5)
  209. .n6    addq.l        #2,a5
  210.     tst.b        d3
  211.     beq.s        .next
  212.     add.b        d0,d0
  213.     bcc.s        .n7
  214.     move.w        d1,(a5)
  215. .n7    addq.l        #2,a5
  216.     add.b        d0,d0
  217.     bcc.s        .next
  218.     move.w        d1,(a5)
  219. .next    add.l        d6,a2
  220.     add.l        d7,a3
  221.     dbra        d4,.ylp
  222.     rts
  223.  
  224. *-------------------------------------------------------*
  225. print_line:
  226. *-------------------------------------------------------*
  227.     pushall
  228.     move.l        fontptr,a6
  229.     move.l        screen,a1
  230. .loop    moveq        #0,d0
  231.     move.b        (a0)+,d0
  232.     beq.s        .out
  233.     cmp.w        #27,d0
  234.     beq.s        .ctrl
  235.     bsr        print_char
  236.     move.w        textgap,d0
  237.     add.w        d0,char_x
  238.     bra.s        .loop
  239. .out    popall
  240.     rts
  241. .ctrl    move.b        (a0)+,d0
  242.     cmp.b        #"Y",d0
  243.     beq.s        .pos
  244.     bra.s        .loop
  245. .pos    moveq        #0,d0
  246.     move.b        (a0)+,d0
  247.     move.w        d0,char_x
  248.     moveq        #0,d0
  249.     move.b        (a0)+,d0
  250.     add.w        d0,char_x
  251.     moveq        #0,d0
  252.     move.b        (a0)+,d0
  253.     move.w        d0,char_y
  254.     bra.s        .loop
  255.  
  256. *-------------------------------------------------------*
  257. init_font:
  258. *-------------------------------------------------------*
  259.     move.w        #6,textgap
  260.     move.l        #font,fontptr
  261.     move.l        fontptr,a0
  262.     lea        truefont,a1
  263.     move.w        #256-1,d0
  264. .char:    move.b        (a0)+,(a1)
  265.     move.b        (a0)+,256*1(a1)
  266.     move.b        (a0)+,256*2(a1)
  267.     move.b        (a0)+,256*3(a1)
  268.     move.b        (a0)+,256*4(a1)
  269.     move.b        (a0)+,256*5(a1)
  270.     addq.l        #1,a1
  271.     dbra        d0,.char
  272.     lea        truefont,a0
  273.     move.l        fontptr,a1
  274.     move.w        #256-1,d0
  275. .copy    move.l        (a0)+,(a1)+
  276.     move.w        (a0)+,(a1)+
  277.     dbra        d0,.copy
  278.     rts
  279.  
  280. *-------------------------------------------------------*
  281. framecounter:
  282. *-------------------------------------------------------*
  283.     addq.l        #1,fpsc
  284.     ifd        debuggable
  285.     jmp        ([old_timerc.l])
  286.     elseif
  287.     bclr        #5,$FFFFFA11.w
  288.     rte
  289.     endc
  290.  
  291. *-------------------------------------------------------*
  292. new_vbi:
  293. *-------------------------------------------------------*
  294.     tst.w        timer
  295.     beq.s        .nd
  296.     subq.w        #1,timer
  297. .nd:    addq.l        #1,vbls
  298.     addq.w        #1,frame
  299.     ifd        debuggable
  300.     rts
  301.     elseif
  302.     rte
  303.     endc
  304.  
  305. *-------------------------------------------------------*
  306.         data
  307. *-------------------------------------------------------*
  308.     
  309. fps:        dc.b    " FPS",0
  310. frames:        dc.b    " VBL",0
  311. point:        dc.b    ".",0
  312.         even
  313.  
  314. *-------------------------------------------------------*
  315.         bss
  316. *-------------------------------------------------------*
  317.  
  318. old_vbi:        ds.l    1
  319. old_timerc:        ds.l    1
  320.  
  321. numtext_ptr:        ds.l    1
  322.  
  323. timer:            ds.w    1
  324. vbls:            ds.l    1
  325. ovbls:            ds.l    1
  326. fpsc:            ds.l    1
  327. fpso:            ds.l    1
  328. fc_history:        ds.l    8
  329. char_x:            ds.w    1
  330. char_y:            ds.w    1
  331. char_col:        ds.w    1
  332. textgap:        ds.w    1
  333. fontptr:        ds.l    1
  334.  
  335.             ds.b    256
  336. stringspace:        ds.b    1
  337.             even
  338.  
  339. truefont:        ds.w    256*8*8
  340.  
  341. *-------------------------------------------------------*
  342.         text
  343. *-------------------------------------------------------*
  344.